const QmsModule = {
	namespaced: true, // 启用命名空间
	state: {
		App_demo: false, // 是否为演示账套
		//串口参数
		portName: '',
		BaudRate: '',
		DataBits: '',
		StopBits: '',
		ParityBit: '',
		//

		UserInfo: uni.getStorageSync('UserInfo') ? JSON.parse(uni.getStorageSync('UserInfo')) : {},
		Authorization: false, // 授权
		CreateTime: null, // 授权日期
		expireDate: null, // 授权期限
		IPModel: {
			SignalR: uni.getStorageSync('SignalR_IP') || '127.0.0.1', // SignalR
			SignalR_Status: false, // 连接状态
		},
		SignalRConnect: null,
		SignalRClientID: '',
		SignalRLiveMethod: '',
		UpdateSwitch: false, // 开启检索更新后，无更新时是否提示。
		BaseScreenParm: {}, // 下拉参数集合


		RecordScan: false, // 是否在显示智控页的时候，开启扫描
		HistoryDevice: uni.getStorageSync('Agreement_History_DevicesList') ? JSON.parse(uni.getStorageSync(
			'Agreement_History_DevicesList')) : [], // 记录历史连接设备
		CheckHisValue: uni.getStorageSync('CheckHisValue') ? JSON.parse(uni.getStorageSync('CheckHisValue')) :
		0, // 记录选中协议的索引
		deviceId: null, // 记录连接的蓝牙设备ID
		deviceStatus: true, // 记录连接设备的状态

		DeviceLinkConfig: { // 记录设备链接
			agreement: {}, // 协议信息

			inControlPage: false, // 当前页栈是否存在智控界面
			DeviceLink_Type: "", // 设备连接方式
			DeviceLink_Content: false, // 设备连接状态
			DeviceHistory: uni.getStorageSync('Agreement_History_DevicesList') ? JSON.parse(uni.getStorageSync(
				'Agreement_History_DevicesList')) : [], // 记录历史连接设备
			CheckHisValue: uni.getStorageSync('CheckHisValue') ? JSON.parse(uni.getStorageSync('CheckHisValue')) :
				0, // 记录选中设备在列表中的索引
			Boolean: { // 蓝牙连接参数
				BluetoothStatus: false, // 是否有其他设备连接
				deviceObj: {}, // 设备连接信息
				deviceTypeInfo: {}
			},

			device_all_isLink: [], // 所有已连接设备

			deviceList_his: [], // (新)历史连接设备，只记录连接过的设备数据

			tempData_device: { // 临时数据信息
				deviceInfo: {}, // 选中的设备信息
				agreement: null, // 当前创建的构造函数

			}
		},

	},
	mutations: {
		RECEIVECODE(state, value) { // 存储SignalR
			state.IPModel.SignalR = value
			uni.setStorageSync('SignalR_IP', state.IPModel.SignalR)

			// 检查是否成功保存
			const saveCode = uni.getStorageSync('SignalR_IP')
			if (saveCode == state.IPModel.SignalR) {
				console.log('保存成功')
			} else {
				console.log('保存失败')
			}
		},
		/** 修改state 数据_测试
		 * 	payload.Name1 - state层级属性数据 如 user.info.score
		 * 	payload.data  - 赋值内容
		 *  payload.StorageName  - 缓存名称，有缓存时会开启缓存
		 *  payload.StorageData  - 缓存内容，已处理成JSON格式
		 * 	@param {object} payload  这是一个对象，包含属性名，赋值内容，缓存名、缓存内容
		 */
		ChangeAndSetStateData(state, payload) {
			// 解构出要修改的属性名
			const {
				Name1,
				data,
				StorageName,
				StorageData,
			} = payload;

			// 如果属性名存在多级，可以使用动态属性名来修改对应的值
			const levels = Name1.split('.');
			let currentState = state;
			for (let i = 0; i < levels.length - 1; i++) {
				currentState = currentState[levels[i]];
			}
			currentState[levels[levels.length - 1]] = data;

			// 根据StorageName参数来决定是否记录缓存
			if (StorageName) {
				uni.setStorageSync(StorageName, StorageData);
			}
		},
		ChangeSignalRConnect(state, connect) {
			state.SignalRConnect = connect;
		},
		UpdateSignalRStatus(state, status) {
			state.IPModel.SignalR_Status = status;
		},
		UpdateSignalRClientID(state, ClientID) {
			state.SignalRClientID = ClientID;
		},
		AddSignalRLive(state, liveMethod) {
			if (state.SignalRLiveMethod) {
				clearInterval(state.SignalRLiveMethod);
			}
			state.SignalRLiveMethod = liveMethod;
			//state.SignalRLiveMethod();
		},
	},
	actions: {
		// 设备链接方法



		GetDeviceStatus({
			state,
			commit,
			dispatch
		}, {
			agreement,
			callback
		}) { // 获取设备连接状态
			agreement.GetStatus((deviceId, connected) => {
				console.log(deviceId);
				console.log(connected);
				// console.log(uni.$m.utils.findPageInStack("/st_qms/control/control"));
				console.log(!state.DeviceLinkConfig.inControlPage);

				// if (!state.DeviceLinkConfig.inControlPage) { // 首页未打开过智控
				// 	dispatch("DisconnectBtn", {
				// 		agreement: agreement,
				// 		deviceId: deviceId,
				// 		callback: () => {
				// 			uni.$m.utils.msg("设备已断开");
				// 		}
				// 	})
				// } else {

				// 设置设备连接状态
				commit("ChangeAndSetStateData", {
					Name1: 'DeviceLinkConfig.DeviceLink_Content',
					data: connected
				});


				let ret = {
					deviceId: deviceId, // 设备ID
					connected: connected, // 设备连接状态
				};


				commit("ChangeAndSetStateData", {
					Name1: 'DeviceLinkConfig.Boolean.deviceTypeInfo',
					data: ret
				})


				callback && callback(ret)

				// 更改为通过监听器触发所有智控页面的断连事件
				// uni.$emit("deviceLinkByDis",ret);

				// }

			});

		},
		DisconnectBtn({
			state,
			commit
		}, {
			agreement,
			deviceId,
			callback
		}) { // 断开连接
			agreement.Disconnect(deviceId);

			commit("ChangeAndSetStateData", {
				Name1: 'DeviceLinkConfig.DeviceLink_Content',
				data: false
			})

			callback && callback()
		},


		receiceCode({
			commit
		}, value) {
			commit('RECEIVECODE', value)
		}
	},
	getters: {
		SignalR_IP: state => state.IPModel.SignalR,
		SignalR_Status: state => state.IPModel.SignalR_Status,
		SignalR_Connect: state => state.SignalRConnect,
		SignalR_ClientID: state => state.SignalRClientID,
		DeviceLink_Content: state => state.DeviceLinkConfig.DeviceLink_Content, // 设备连接状态
		UserInfo: state => state.UserInfo, // 登录用户信息
		// HistoryDevice: state => state.HistoryDevice, // 历史连接设备
		// CheckHisValue: state => state.CheckHisValue, // 选中的第几个下拉

		DeviceHistory: state => state.DeviceLinkConfig.DeviceHistory, // 历史连接设备
		DeviceHisValueCheck: state => state.DeviceLinkConfig.CheckHisValue, // 选中的第几个下拉
		SelectDeviceInfo: state => { // 获取选中的设备信息
			let selectDataInfo = {};
			const {
				DeviceHistory = [],
					CheckHisValue = 0
			} = state.DeviceLinkConfig;

			if (DeviceHistory.length) {
				selectDataInfo = DeviceHistory[CheckHisValue]
			};
			return selectDataInfo;
		},
		DeviceAgreement: (state) => { // 蓝牙设备指定协议
			return state.DeviceLinkConfig.agreement;
		},
		//串口参数获取
		Serial_portName: state => state.portName,
		Serial_BaudRate: state => state.BaudRate,
		Serial_DataBits: state => state.DataBits,
		Serial_StopBits: state => state.StopBits,
		Serial_ParityBit: state => state.ParityBit,
	}
};

export default QmsModule;